package concurrency.basicthreading.demo;
import java.util.concurrent.TimeUnit;
/**
 * 这个例子意义是向你揭示，后台线程在不执行finally块的情况下回种植run()方法。
 * 如果你注释掉t.setDaemon(true); finally中的句子将被打印。
 * 
 * 虽然finally承诺确保被执行,但这种情况是正确的。
 * 原因在于：当最后一个非后台线程终止时，所有的后台线程会"突然"终止。因为一旦main()退出，JMV会立即关闭所有的后台线程。
 */
public class Demo10DaemonAndFinally implements Runnable{

	@Override
	public void run() {
		try {
			System.out.println("Starting Daemon and Finally");
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			System.out.println("Exiting via InterruptedException");
		} finally {
			System.out.println("This should always run?");
		}
	}

	public static void main(String[] args) {
		Thread t = new Thread(new Demo10DaemonAndFinally());
		t.setDaemon(true);
		t.start();
	}
}
